#include <signal.h>
#include <unistd.h>
#include <iostream>

using namespace std;

// int main()
// {
//     sigset_t set;

//     sigemptyset(&set);
//     sigaddset(&set,2);
//     sigprocmask(SIG_set,&set,nullptr);

//     while(1)
//     {
//         sigset_t pending;
//         sigpending(&pending);

//         for(int i=31;i>0;i--)
//         {
//             if(sigismember(&pending,i))
//                 cout<<"1";
//             else
//                 cout<<"0";
//         }
//         cout<<endl;

//         sleep(1);
//     }
// }

void shouSet(sigset_t *set)
{
    for (int i = 31; i > 0; i--)
    {
        if (sigismember(set, i))
            cout << 1;
        else
            cout << 0;
    }
    cout << endl;
}

// int main()
// {
//     sigset_t set,oldset;
//     sigemptyset(&oldset);
//     sigfillset(&set);

//     sigprocmask(SIG_SETMASK,&set,&oldset);  //设置block
//     cout<<"oldset: ";
//     shouSet(&oldset);

//     sigprocmask(SIG_SETMASK,&set,&oldset);  //获取我们设置后的block
//     cout<<"newset: ";
//     shouSet(&oldset);

//     return 0;
// }

// void handler(int signum)
// {
//     cout<<"catch signal: "<<signum<<endl;

//     sigset_t pending;
//     sigpending(&pending);
//     cout<<"pending: ";
//     shouSet(&pending);

//     sigset_t block,oldblock;
//     sigemptyset(&block);
//     sigprocmask(SIG_BLOCK,&block,&oldblock);
//     cout<<"block:   ";
//     shouSet(&oldblock);
// }

// int main()
// {
//     signal(2,handler);
//     raise(2);

//     return 0;
// }

// void handler(int signum)
// {
//     cout << "catch signal: " << signum << endl;

//     int cnt = 3;
//     while (cnt--)
//     {
//         sigset_t pending;
//         sigpending(&pending);
//         cout << "pending: ";
//         shouSet(&pending);

//         sigset_t block, oldblock;
//         sigemptyset(&block);

//         // 不修改block
//         sigprocmask(SIG_BLOCK, &block, &oldblock);

//         // 解除block
//         // sigprocmask(SIG_SETMASK, &block, &oldblock);
//         cout << "block:   ";
//         shouSet(&oldblock);

//         sleep(1);
//     }
// }

// int main()
// {
//     signal(2, handler);

//     while (1)
//     {
//         raise(2);
//         sleep(1);
//         sigset_t pending;
//         sigpending(&pending);
//         cout << "main pending: ";
//         shouSet(&pending);

//         sigset_t block, oldblock;
//         sigemptyset(&block);

//         // 不修改block
//         sigprocmask(SIG_BLOCK, &block, &oldblock);

//         // 解除block
//         // sigprocmask(SIG_SETMASK, &block, &oldblock);
//         cout << "main block:   ";
//         shouSet(&oldblock);
//     }

//     return 0;
// }

// void handler(int signum)
// {
//     cout << "catch signal: " << signum << endl;

//     sigset_t block, oldblock;
//     sigemptyset(&block);
//     sigprocmask(SIG_BLOCK, &block, &oldblock);
//     cout << "block: ";
//     shouSet(&oldblock);
// }

// int main()
// {
//     struct sigaction act;
//     act.sa_handler = handler;
//     act.sa_flags = 0;

//     sigemptyset(&act.sa_mask);
//     for (int i = 0; i < 6; i++)
//         sigaddset(&act.sa_mask, i);

//     sigaction(2, &act, nullptr);
//     raise(2);

//     return 0;
// }